﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
 
using System.Text;
using System.IO;
using WinnerCMS.Common;
using WinnerCMS.Data;

namespace WinnerCMS.Install
{
    /// <summary>
    /// 检查服务器配置
    /// </summary>
    public class CheckServerSetting
    {
        private const string FalsePic = "<img src=\"Images/failed-false.gif\" />";
        private const string TruePic = "<img src=\"Images/success-true.gif\" />";


        #region 测试生成文件夹和文件
        /// <summary>
        /// 测试生成文件夹和文件
        /// </summary>
        /// <returns></returns>
        static public string CheckFile()
        {
            StringBuilder err = new StringBuilder();

             
            ///////////////////////////////
            try
            {
                new FileIO().WriterFile(HttpContext.Current.Server.MapPath("~/Soft/test.txt"), "测试");
                err.Append(TruePic + "试图往Soft目录写入文件成功。<br>");
            }
            catch
            {
                err.Append(FalsePic + "试图往Soft目录写入文件失败。如果启用静态文件的模式，将无法生成静态网页。<br>");
            }
            try
            {
                File.Delete(HttpContext.Current.Server.MapPath("~/Soft/test.txt"));
                err.Append(TruePic + "试图在Soft目录删除文件成功。 <br>");
            }
            catch
            {
                err.Append(FalsePic + "试图在Soft目录删除文件失败。如果启用静态文件的模式，将无法删除静态网页。<br>");
            }
            ///////////////////////////////
            try
            {
                new FileIO().WriterFile(HttpContext.Current.Server.MapPath("~/Article/test.txt"), "测试");
                err.Append(TruePic + "试图往Article目录写入文件成功。 <br>");
            }
            catch
            {
                err.Append(FalsePic + "试图往Article目录写入文件失败。如果启用静态文件的模式，将无法生成静态网页。<br>");
            }
            try
            {
                File.Delete(HttpContext.Current.Server.MapPath("~/Article/test.txt"));
                err.Append(TruePic + "试图在Article目录删除文件成功。 <br>");
            }
            catch
            {
                err.Append(FalsePic + "试图在Article目录删除文件失败。如果启用静态文件的模式，将无法删除静态网页。<br>");
            }
            ///////////////////////////////
            try
            {
                Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/Soft/test"));
                err.Append(TruePic + "试图往Soft目录创建目录成功。 <br>");
            }
            catch
            {
                err.Append(FalsePic + "试图往Soft目录创建目录失败。如果启用静态文件的模式，将无法生成静态网页保存的目录<br>");
            }

            try//非检测项
            {
                Directory.Delete(HttpContext.Current.Server.MapPath("~/Soft/test"));

            }
            catch { }

            ///////////////////////////////
            try
            {
                Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/Article/test"));
                err.Append(TruePic + "试图往Article目录创建目录成功。 <br>");
            }
            catch
            {
                err.Append(FalsePic + "试图往Article目录创建目录失败。如果启用静态文件的模式，将无法生成静态网页保存的目录<br>");
            }

            try//非检测项
            {
                Directory.Delete(HttpContext.Current.Server.MapPath("~/Article/test"));

            }
            catch { }
            ///////////////////////////////
            try
            {
                new FileIO().WriterFile(HttpContext.Current.Server.MapPath("~/JS/test.txt"), "测试");
                err.Append(TruePic + "试图往JS目录写入文件成功。<br>");
            }
            catch
            {
                err.Append(FalsePic + "试图往JS目录写入文件失败。将无法生成广告JS文件。<br>");
            }
            try
            {
                File.Delete(HttpContext.Current.Server.MapPath("~/JS/test.txt"));
                err.Append(TruePic + "试图在JS目录删除文件成功。 <br>");
            }
            catch
            {
                err.Append(FalsePic + "试图在JS目录删除文件失败。将无法删除广告JS文件。<br>");
            }
            //////////////////////////////
            DirectoryInfo di = new DirectoryInfo(HttpContext.Current.Server.MapPath(@"~\Config"));
            FileIO fileio = new FileIO();
            foreach (FileInfo fi in di.GetFiles("*.config"))
            {
                try
                {
                    fileio.WriterFile(fi.FullName, " ", true);
                    err.Append(TruePic + fi.Name + "写入成功。 <br>");
                }
                catch
                {
                    err.Append(FalsePic + fi.Name + "写入失败。 <br>");
                }
            }

            try
            {

                Xml.SaveSetting("Test", DateTime.Now.ToShortDateString(), @"Web.config");
                err.Append(TruePic + "Web.config写入成功<br>");
            }
            catch
            {
                err.Append(FalsePic + "Web.config写入失败<br>");
            }

            return err.ToString();
        }
        #endregion


        /// <summary>
        /// 是否虚拟目录
        /// </summary>
        /// <returns></returns>
        static public bool IsVirtualDirectory()
        {
            string path1 = HttpContext.Current.Server.MapPath("/");
            string path2 = HttpContext.Current.Server.MapPath("~/");

            return path1 != path2;
        }

        #region 测试数据库连接是否成功。
        /// <summary>
        /// 测试数据库连接是否成功。
        /// </summary>
        /// <returns></returns>
        public bool TestConnection(string connectionString)
        {
            return new Entities().TestConnection(connectionString);
        }
        #endregion
    }
}
